import axios from 'axios';
import {doGet, appJsonPost, doPut, doDelete, formPost} from "@/network/request";

// 基础URL
const baseUrl = import.meta.env.VITE_BASE_URL;

// 获取 CSRF Token
 function getCsrfToken() {
    const name = 'XSRF-TOKEN=';
    const decodedCookie = decodeURIComponent(document.cookie);
    const cookies = decodedCookie.split(';');
    for (let i = 0; i < cookies.length; i++) {
        const cookie = cookies[i].trim();
        if (cookie.indexOf(name) === 0) {
            return cookie.substring(name.length, cookie.length);
        }
    }
    console.warn('CSRF Token not found in cookies');
    return '';
}

// 设置请求拦截器以添加 CSRF Token
axios.interceptors.request.use(config => {
    const csrfToken = getCsrfToken();
    console.log('CSRF Token:', csrfToken);
    if (csrfToken) {
        config.headers['X-XSRF-TOKEN'] = csrfToken; // 假设后端使用的是 X-XSRF-TOKEN
    }
    return config;

}, error => {
    return Promise.reject(error);
});

// COS接口
export const cosApi = {
    /**
     * 上传对象
     * @param key 上传对象的key
     * @param file 要上传的文件
     * @returns 包含上传结果的Promise对象
     */
    uploadObject(key: string, file: Blob) {
        const formData = new FormData();
        formData.append('file', file);
        formData.append('key', key);
        return formPost({
            url: `/api/cos`,
            data: formData,
            headers: {
                'Content-Type': 'multipart/form-data'
            }

        });
    },
    /**
     * 删除对象
     * @param key 要删除的对象的key
     * @returns 包含删除结果的Promise对象
     */
    deleteObject(key: string) {
        return doDelete({
            url: `/api/cos`,
            params: { key },
            headers: {
                'X-XSRF-TOKEN': getCsrfToken()
            }
        });
    },
    /**
     * 播放对象
     * @param key 要播放的对象的key
     * @returns 包含播放结果的Promise对象
     */
    playObject(key: string) {
        return doGet({
            url: `/api/cos`,
            params: { key },
            headers: {
                'X-XSRF-TOKEN': getCsrfToken()
            }
        });
    },
    /**
     * 搜索对象
     * @param key 搜索关键字
     * @returns 包含搜索结果的Promise对象
     */
    searchObjects(key: string) {
        return doGet({
            url: `/api/cos/object`,
            params: { key },
            headers: {
                'X-XSRF-TOKEN': getCsrfToken()
            }
        });
    },
    /**
     * 上传大文件（断点续传）
     * @param key 上传大文件的key
     * @param file 要上传的大文件
     * @returns 包含上传结果的Promise对象
     */
    // 上传大文件（断点续传）
    uploadLargeFile(key: string, file: File) {
        const formData = new FormData();
        formData.append('file', file);
        formData.append('key', key);
        return axios.post(`${baseUrl}/api/cos/file`, formData, {
            headers: { 'Content-Type': 'multipart/form-data' }
        });
    }
};

// Resource接口
export const resourceApi = {
    // 根据 resourceId 查询资源
    getbyId(resourceId: number) {
        return doGet({
            url: `/api/resources/${resourceId}`,
            headers: {
                'X-XSRF-TOKEN': getCsrfToken()
            }
        });
    },
    // 上传保存资源
    saveResource(resource: object) {
        return appJsonPost({
            url: `/api/resources`,
            data: resource,
            headers: {
                'X-XSRF-TOKEN': getCsrfToken()
            }
        });
    },
    // 删除资源
    deleteResource(resourceId: number) {
        return doDelete({
            url: `/api/resources`,
            params: { resourceId },
            headers: {
                'X-XSRF-TOKEN': getCsrfToken()
            }
        });
    },
    // 根据资源名称和标签搜索资源（支持分页）
    searchResources(tag: string, resourceName: string, pageNum: number = 1, pageSize: number = 10) {
        return doGet({
            url: `/api/resources`,
            params: { resourceName, tag, pageNum, pageSize },
            headers: {
                'X-XSRF-TOKEN': getCsrfToken()
            }
        });
    },
    // 更新资源（只允许修改 resourceType, resourceDescription, 和 tag）
    updateResource(resourceId: number, resourceUpdate: object) {
        return doPut({
            url: `/api/resources/${resourceId}`,
            data: resourceUpdate,
            headers: {
                'X-XSRF-TOKEN': getCsrfToken()
            }
        });
    },
    es(key, page, size) {
        return axios.post(`${baseUrl}/api/resources/es`, {
            key: key || '',
            page,
            size
        }).then(response => {
            // 假设后端返回的数据结构为 { total: xxx, resources: [...] }
            const data = response.data;
            const total = data.total; // 获取资源总数
            const resources = data.resources; // 获取资源列表
            return {total, resources}; // 返回处理后的数据
        });
    },
    exportExcel(resourceName, tag, pageNum, pageSize){
        window.location.href = baseUrl + "/api/resources/excel?"+"resourceName="+resourceName+"&tag="+tag+"&pageNum="+pageNum+"&pageSize="+pageSize;
    }
};
